#ifndef LOOPTHREADPOOL
#define LOOPTHREADPOOL

// 对所有的LoopThread进行管理及分配
// 线程数量可配置，主从Reactor模型，主线程负责新连接获取，从属线程负责新连接的事件处理和监控
// 可能从属线程会为0，就变成了但Reactor服务器，一个线程既负责获取连接，也负责连接的处理
// 对所有的线程进程管理，实际上是管理0个或多个LoopThread对象
// 线程分配的功能：
//    主线程获取新连接后，把新连接挂到从属线程上进行事件处理和监控
//      只有一个从属线程，直接分配给主线程的EventLoop进行处理
//      多个从属线程，使用RR轮转，进行线程的分配(将对应线程的EventLoop获取到，设置给对应的Connection)
#include "LoopThread.h"
#include <vector>

class LoopThreadPool
{
public:
    LoopThreadPool(EventLoop *);
    void setThreadCount(uint32_t threadcount);
    void Create(); // 创建所有的从属线程
    EventLoop *getNextLoop();

private:
    // 线程数量
    uint32_t _thread_count;
    // 对应_loops中的下标
    uint32_t _next_loop_idx;
    // _loops大小为0时，新连接的事件处理和监控分配给这个对象
    EventLoop *_baseloop;
    // 线程池
    std::vector<LoopThread *> _thread_pool;
    // size大于0时，就从这里分配EventLoop对象进行连接的事件处理和监控
    std::vector<EventLoop *> _loops;
};

#endif